#ifndef __PRODUCT__
#define __PRODUCT__

#include <iostream>

using namespace std;

class ProductA
{
	public:
		ProductA() {};
		virtual ~ProductA() {};
};

class ProductA1 : public ProductA
{
	public:
		ProductA1()
		{
			cout<<"construct ProductA1"<<endl;
		}

		virtual ~ProductA1()
		{
			cout<<"destruct ProductA1"<<endl;
		}
};

class ProductA2 : public ProductA
{
	public:
		ProductA2()
		{
			cout<<"construct ProductA2"<<endl;
		}

		virtual ~ProductA2()
		{
			cout<<"destruct ProductA2"<<endl;
		}
};


class ProductB
{
	public:
		ProductB() {};
		virtual ~ProductB() {};
};

class ProductB1 : public ProductB
{
	public:
		ProductB1()
		{
			cout<<"construct ProductB1"<<endl;
		}

		virtual ~ProductB1()
		{
			cout<<"destruct ProductB1"<<endl;
		}
};

class ProductB2 : public ProductB
{
	public:
		ProductB2()
		{
			cout<<"construct ProductB2"<<endl;
		}

		virtual ~ProductB2()
		{
			cout<<"destruct ProductB2"<<endl;
		}
};


#endif
